@TOC
Spring Cloud Alibaba简介
Spring Cloud Alibaba 致力于提供微服务开发一站式解决方案。此项目包括开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,你只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里云中间件来迅速搭建分布式应用系统。
SpringCloud Alibaba 和 Spring Cloud 搭配方案:
- SpringCoud Alibaba-Nacos:注册中心(服务发现 / 注册)
- SpringCoud Alibaba-Nacos:配置中心(动态配置管理)
- SpringCoud Alibaba-Sentinel:服务容错(限流、降级、熔断)
- SpringCoud Alibaba-Seata:原 Fescar,即分布式解决方案
- SpringCoud-Ribbon:负载均衡
- SpringCoud-Feign:声明式 HTTP 客户端(调用远程服务)
- SpringCoud-Gateway:API 网关(webflux 编程模式)
- SpringCoud-Sleuth:调用链监控
Spring Cloud Alibaba主要功能:
- 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
- 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
- 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
- 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
- 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
- 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
相关组件:
Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Sentinel:阿里巴巴开源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
开源地址:https://github.com/alibaba/spring-cloud-alibaba/
1. Nacos 简介
Nacos 主要提供了服务发现、服务配置以及服务管理的功能。以下援引自 **官方网站**:
基本特征:
- 服务发现
- 动态配置
- 动态 DNS 服务
- 服务及元数据管理
1.1 Nacos 安装 + 配置中心
- Docker 安装
- 下载编译好的安装包
首先下载安装包:https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.tar.gz
然后解压,如果是 windows 直接在 bin 目录下双击 startup.cmd 启动。
如果是Linux, bin 目录下执行命令: sh startup.sh -m standalone
注意:系统一定要配置好 jdk ,测试 java 和 javac 两个命令要存在!
Nacos 启动成功后,浏览器输入: http://192.168.1.132:8848/nacos 就能看到启动页面了。登录页面的默认用户名/密码都是 nacos ,登录后如下图:
配置中心:类似于 Spring Cloud Config ,点击服务端配置——> 配置管理——> 配置列表——> 点击+,这里主要配置三个东西, Data ID、Group 以及配置的内容。
Data Id 的格式是:
${prefix}- ${spring.profile.active}. ${file-extension}
- prefix 默认为 spring.application.name 的值;
- spring.profile.active 即为当前环境对应的 profile;
- file-exetension 为配置内容的数据格式。
注:当 - spring.profile.active 为空 / 未填写时,相对应的连接符 - 也将不存在 (省略),dataId 的拼接格式变成 ${prefix}. ${file-extension};
file-exetensio可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型
最终格式:${spring.application.name}- ${spring.profile.active}. ${spring.cloud.nacos.config.file-extension}
然后在新添加一个配置如下:
接下来创建新的 Spring Cloud Alibaba 项目进行测试,添加如下依赖:
然后,新建 bootstrap.properties,配置如下:
spring.application.name=nacos |
添加测试 Controller:
|
最后启动项目,浏览器访问: http://localhost:8080/hello ,就会获取到在页面配置的内容,如下:
1.2 注册中心
Navos 也可做注册中心,代替 Eureka。创建 Spring Boot 项目(此时相当于provider),添加依赖:
添加如下配置:
spring.application.name=nacos01 |
提供测试 Controller :
|
将项目打包,启动两个实例。
java -jar nacos01-0.0.1-SNAPSHOT.jar --server.port=8080 |
启动成功后,这时刷新,服务已经注册上来了。如图:
provider 已经创建成功,再创建一个 consumer ,配置基本与 nacos01 一致。
配置如下:
spring.application.name=nacos02 |
开启负载均衡:
|
创建测试 Controller:
|
启动 naxos02 ,然后可以看到已经注册挤进去了。
然后浏览器不停刷新访问:http://localhost:8083/hello,达到负载均衡效果。
总结:Nacos 做为配置中心的话比 Spring Cloud Config 方便一些,作为注册中心与 Eureka、Consul 区别不大。
2. Sentinel
- 使用场景丰富
- 有完备的实时监控
- 广泛的开源生态
Sentinel 整体上可以分为两个核心部分:
- 核心库
- 控制台
2.1 Sentinel 安装
首先下载 控制台 jar ,这是一个 Spring Boot 工程,下载好之后,直接启动。下载地址:
https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel-dashboard-1.8.0.jar
下载完后启动服务,浏览器访问如下则成功。
2.2 Sentinel 应用
1.新建一个 Spring Boot 项目,添加 Sentinel 依赖,如下:
创建成功后,配置 Sentinel 控制台地址:
spring.application.name=sentinel |
再创建一个测试 Controller:
|
测试如下:
然后刷新 sentinel 控制台页面,发现它的信息已经注册上去了,如下图:
2. 接下来做一个流量控制的测试,先配置如下信息,每秒处理5个请求:
写一个测试类,这里假设一次来25个请求:
|
启动测试类,打印日志,每秒处理5个请求:
总结: 这里的流控规则比之前的 Resilience4j 较为方便一些,只需针对接口进行配置即可。
2.2.1 Nacos 中配置流控规则
接上文代码,整合配置中心,添加依赖至 sentinel 服务中:
<dependency> |
修改配置文件:
spring.cloud.sentinel.datasource.ds.nacos.server-addr=192.168.1.132:8848 |
由于 nacos 要把数据告诉 sentinel,然后它去创建限流规则,那么服务需要注册到 nacos 上去。那么参考之前的,新建 bootstrap.properties 配置文件注册到 nacos,添加如下:
spring.cloud.nacos.config.server-addr=192.168.1.132:8848 |
访问nacos 控制台:http://192.168.1.132:8848/nacos,新建一个配置,如下:
[ |
添加完后启动 sentinel 服务,此时刷新 sentinel 管理页面没有数据。如下:
然后访问 http://127.0.0.1:8081/hello,如下:
然后再次刷新 sentinel 管理页面,发现数据已经注册上来了,这条数据就是刚才配置的信息,如下图:
以上就是 nacos 与 sentinel 的结合使用。
项目案例地址 :https://github.com/astronger/springcloud-simple-samples